package shoppingmall.reception.controller;


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import shoppingmall.reception.dto.ProductOrderVO;
import shoppingmall.reception.dto.Result;
import shoppingmall.reception.pojo.ProductOrder;
import shoppingmall.reception.service.ProductOrderService;

import java.util.HashMap;
import java.util.List;

/**
 * 前台 商品订单相关controller层
 */
@Slf4j
@RestController
public class ProductOrderController {

    @Autowired
    private ProductOrderService productOrderService;  //service层实例

    /**
     * 添加一条订单数据(对应用户id下的)
     */
    @PostMapping("/reception/user/order")
    public Result saveProductOrder (@RequestBody ProductOrder productOrder) {
        //输出日志
        log.info("添加一条订单数据,用户id=");
        //调用service层方法
        List<String> orderIds = productOrderService.saveProductOrder(productOrder);
        //对返回的结果判断
        if(orderIds == null) {
            return Result.error("商品订单创建失败!");
        }
        //准备响应创建的订单号
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("orderIds",orderIds);
        return Result.success(hashMap);
    }

    /**
     * 批量创建订单数据(用户购物车勾选多个商品进行结算)
     */
    @PostMapping("/reception/user/order/batch")
    public Result saveProductOrderBatch (@RequestBody List<ProductOrder> productOrders){
        //输出日志
        log.info("用户创建订单批量，用户id={}",productOrders.get(0).getUserId());
        //调用service层方法
        List<String> orderIds = productOrderService.saveProductOrderBatch(productOrders);
        //对执行结果进行判断
        if(orderIds == null) {
            return Result.error("商品订单批量创建失败!");
        }
        return Result.success(orderIds);
    }

    /**
     * 删除订单数据(支持单条、多条删除)
     */
    @DeleteMapping("/reception/user/order/batch")
    public Result deleteProductOrderBatch (@RequestBody List<String> orderIds){
        //输出日志
        log.info("批量删除用户订单数据,orderIds={}",orderIds);
        //调用服务层方法
        boolean isDel = productOrderService.deleteProductOrderBatch(orderIds);
        //对执行结果进行判断
        if(!isDel) {
            return Result.error("批量删除用户订单数据失败!");
        }
        return Result.success("批量删除用户订单数据成功!");
    }

    /**
     * 修改用户某条订单数据(主要是 订单联系人、联系人号码、联系人地址、备注)
     */
    @PutMapping("/reception/user/order")
    public Result updateProductOrder(@RequestBody ProductOrder productOrder){
        //输出日志
        log.info("修改用户某条订单数据,orderId={}",productOrder.getOrderId());
        //调用服务层方法
        boolean isUpdate = productOrderService.updateProductOrder(productOrder);
        //对执行结果进行判断
        if(!isUpdate) {
            return Result.error("用户订单数据更新失败!");
        }
        return Result.success("用户订单数据更新成功!");
    }


    /**
     * 查询用户某条订单数据(根据订单id = ?  order_id = ?)
     */
    @GetMapping("/reception/user/order")
    public Result getProductOrderByOrderId (@RequestParam String orderId){
        //输出日志
        log.info("查询用户某条订单数据,订单号={}",orderId);
        //调用服务层方法
        List<ProductOrderVO> productOrderVOS = productOrderService.getProductOrderByOrderId(orderId);
        //对执行结果进行判断
        if(productOrderVOS.size() == 0) {
            return Result.error("未查询到订单信息!");
        }
        return Result.success(productOrderVOS);
    }

    /**
     * 查询用户多条订单数据(根据订单id = ? order_id = ?)
     */
    @GetMapping("/reception/user/order/batch")
    public Result getProductOrderByOrderIds (@RequestParam String orderIds){
        //输出日志
        log.info("批量查询用户的多条订单数据,orderIds={}",orderIds);
        //调用service层方法进行处理
        List<ProductOrderVO> productOrderVOS = productOrderService.getProductOrderByOrderIds(orderIds);
        //对执行结果进行判断
        if(productOrderVOS.size() == 0) {
            return Result.error("未查询到相关订单数据!");
        }
        //响应结果
        return Result.success(productOrderVOS);
    }

    /**
     * 查询用户的相关状态订单user_id = ? order_state = ?
     */
    @GetMapping("/reception/user/order/state")
    public Result getProductOrderListByUserIdAndOrderState (@RequestParam int userId, String orderState) {
        //输出日志
        log.info("查询用户的相关状态订单,用户id={},订单状态={}",userId,orderState);
        //调用服务层方法
        List<ProductOrderVO> productOrderVOList = productOrderService.getProductOrderListByUserIdAndOrderState(userId, orderState);
        //对执行结果进行判断
        if(productOrderVOList.size() == 0) {
            return Result.error("未查询到用户相关订单!");
        }
        return Result.success(productOrderVOList);
    }

    /**
     * 查询当前用户所有的订单数据
     */
    @GetMapping("/reception/user/order/all")
    public Result getUserAllProductList (@RequestParam int userId) {
        //输出日志
        log.info("查询当前用户所有的订单数据,用户id={}",userId);
        //调用service层方法
        List<ProductOrderVO> productOrderVOList = productOrderService.getUserAllProductOrderList(userId);
        //对执行结果进行判断
        if(productOrderVOList.size() == 0){
            return Result.error("未查询到用户订单数据!");
        }
        return Result.success(productOrderVOList);
    }
}

